﻿using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

using Microsoft.SharePoint.Utilities;
using System.IO;
using System.Data;
using System.Globalization;
using System.Linq;


namespace WebPartEnqueteIntranet.VisualWebPart1
{
    [ToolboxItemAttribute(false)]
    public class VisualWebPart1 : WebPart
    {
        // Visual Studio might automatically update this path when you change the Visual Web Part project item.
        private const string _ascxPath = @"~/_CONTROLTEMPLATES/WebPartEnqueteIntranet/WebPartEnqueteIntranet/VisualWebPart1UserControl.ascx";

    /*    protected override void CreateChildControls()
        {
            Control control = Page.LoadControl(_ascxPath);
            Controls.Add(control);
            //             Label label = new Label();
            //             label.Text = "Teste de pagina";
            //             this.Controls.Add(label);
        }
        */
    







        Button votar = new Button();
        string perg = null;   // variavel de pergunta
        string verificaUsuario = "";
        string MsgErro = "";
        string verificaResultado = "";

        string ver = "";

        int total = 0;
        int total1 = 0;      // variaveis para a totalização dos votos
        int total3 = 0;
        int total4 = 0;
        int totgeral = 0;
        int totgeral1 = 0;
        int qtdItens = 0;

        int tot1max = 0;
        int tot2max = 0;
        int tot3max = 0;
        int tot4max = 0;

        string op3 = null;   // variaveis para a verificação de perguntas caso a enquete seja somente de 2 perguntas
        string op4 = null;

        RadioButton radio = new RadioButton();
        RadioButton radio1 = new RadioButton();
        RadioButton radio3 = new RadioButton();
        RadioButton radio4 = new RadioButton();
        Label label = new Label();

        public VisualWebPart1()
        {
        }

        protected override void CreateChildControls()
        {
            HttpContext.Current.Response.Write("<div id='processavotacao'>");
            // Chama metodo para visualização dos itens da enquete conforme flag da enquete selecionado by Emerson Allen;
            processaVotacao();
            HttpContext.Current.Response.Write("</div>");
         //   this.Controls.Add(new LiteralControl("<br/>"));
            votar.Text = "";
            votar.ID = "botaovotar";
            votar.Click += new EventHandler(btnVotar_Click);
            this.Controls.Add(votar);
         //   this.Controls.Add(new LiteralControl("<br/>"));
            
            base.CreateChildControls();
        }

        protected void processaVotacao()
        {

            //SPSite site = new SPSite("http://intranet-producao:91/");
            SPSite site = SPContext.Current.Site;
            SPWeb web = site.OpenWeb();

            SPUser usuario = web.CurrentUser;
            //   String pegaUsuario = usuario.ToString();
            String pegaUsuario = usuario.Name;

            SPList list = web.Lists["Lista enquete"];
            SPQuery query = new SPQuery();

            query.Query = "<Where><Eq><FieldRef Name='Flag_x0020_principal'/><Value Type='Boolean'>1</Value></Eq></Where><OrderBy><FieldRef Name='ID' Ascending='True' /></OrderBy>";

            SPListItemCollection listItems = list.GetItems(query);
            int cout = 0;
            int coutusuario = 0;
            qtdItens = listItems.Count;

            if (qtdItens == 0)
            {

              //HttpContext.Current.Response.Write("<p>Nenhuma enquete selecionada para votação.</p> ");
                votar.Visible = false;

            }
            else
            {
                foreach (SPListItem item in listItems)
                {
                    perg = item["Title"].ToString();
                    perg = perg.Replace("'", "");
                    SPQuery queryusuario = new SPQuery();
                    queryusuario.Query = "<Where><And><Eq><FieldRef Name='Flag_x0020_principal' /><Value Type='Boolean'>0</Value></Eq><And><Eq><FieldRef Name='Title' /><Value Type='Text'>" + perg + "</Value></Eq><Eq><FieldRef Name='Author' /><Value Type='User'>" + pegaUsuario + "</Value></Eq></And></And></Where>";
                    SPListItemCollection listItemsusuario = list.GetItems(queryusuario);
                    int qtdItensResultado = listItemsusuario.Count;

                    if (qtdItensResultado == 0)
                    {
                        // HttpContext.Current.Response.Write(item["Title"].ToString());
                        // variavel que identifica o tipo de resultado da enquete caso seja valor=SIM a pagina e redirecionada para resultadoEnquete.aspx; 
                        verificaResultado = "sim";

                    //  this.Controls.Add(new LiteralControl("<br/>"));

                        // cria o objeto Label para a visualização do titulo by Emerson
                        label.Text = item["Title"].ToString();
                        label.ID = "lab";
                        label.Style["margin-left"] = "5px";
                        label.Style["margin-right"] = "0px";
                        label.Style["margin-top"] = "0px";
                        label.Style["margin-bottom"] = "18px";
                        label.Style["color"] = "#5f5f5f";
                        label.Style["font-family"] = "arial,helvetica,sans-serif";
                        label.Style["font-size"] = "14px";
                        label.Style["font-weight"] = "bold";
                        Controls.Add(label);
                        // fim do objeto label
                        
                        this.Controls.Add(new LiteralControl("<br/>"));
                        this.Controls.Add(new LiteralControl("<br/>"));

                        if (item["Opção 1"] != null)
                        {
                            radio.GroupName = "enquete";
                            radio.ID = "r1";
                            radio.Text = item["Opção 1"].ToString();
                            Controls.Add(radio);
                            this.Controls.Add(new LiteralControl("<br/>"));
                        }

                        if (item["Opção 2"] != null)
                        {
                            radio1.GroupName = "enquete";
                            radio1.ID = "r2";
                            radio1.Text = item["Opção 2"].ToString();
                            this.Controls.Add(radio1);
                            this.Controls.Add(new LiteralControl("<br/>"));
                        }

                        if (item["Opção 3"] != null)
                        {
                            radio3.GroupName = "enquete";
                            radio3.ID = "r3";
                            radio3.Text = item["Opção 3"].ToString();
                            this.Controls.Add(radio3);
                            this.Controls.Add(new LiteralControl("<br/>"));
                            op3 = "sim";
                        }

                        if (item["Opção 4"] != null)
                        {
                            radio4.GroupName = "enquete";
                            radio4.ID = "r4";
                            radio4.Text = item["Opção 4"].ToString();
                            this.Controls.Add(radio4);
                            this.Controls.Add(new LiteralControl("<br/>"));
                            op4 = "sim";
                        }
                        else
                        {
                            op4 = " ";
                        }

                    }
                    else
                    {
                        foreach (SPListItem itemusuario in listItemsusuario)
                        {
                            verificaUsuario = itemusuario["Author"].ToString();


                           // string usuariocorreto = verificaUsuario.Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries)[1];
                            string usuariocorreto = verificaUsuario.Replace("#", "").Replace(";", "").Replace("1", "").Replace("2", "").Replace("3", "").Replace("4", "").Replace("5", "").Replace("6", "").Replace("7", "").Replace("8", "").Replace("9", "").Replace("0", "");

                            if (usuariocorreto == pegaUsuario)
                            {
                                verificaResultado = "Não";
                                ver = "sim";
                                // HttpContext.Current.Response.Write("Seu voto já foi processado.");
                                votar.Visible = false;
                                //   redirecionaResultado();
                            }

                            coutusuario++;
                            if (coutusuario == 1)
                            {
                                break;
                            }
                        }
                    }

                    // Pega o valor do titulo para a gravação do resultado da enquete.
                    perg = item["Title"].ToString();

                    cout++;
                    if (cout == 1)
                    {
                        break;
                    }
                }
            }

        }

        protected override void Render(HtmlTextWriter writer)
        {

            if (qtdItens == 0)
            {
                writer.Write("<p>Nenhuma enquete selecionada para votação.</p>");
            }

            if (ver != "")
            {
                redirecionaResultado();
                base.Render(writer);

            }
            else
            {
                base.Render(writer);
            }

        }

        protected void btnVotar_Click(object sender, EventArgs e)
        {
            if (radio.Checked)
            {
                // HttpContext.Current.Response.Write(radio.Text);
                total = 1;
                InserirDadosEnquete(perg, radio.Text, radio1.Text, radio3.Text, radio4.Text, total, total1, total3, total4);
            }
            else if (radio1.Checked)
            {
                //HttpContext.Current.Response.Write(radio1.Text);
                total1 = 1;
                InserirDadosEnquete(perg, radio.Text, radio1.Text, radio3.Text, radio4.Text, total, total1, total3, total4);
            }
            else if (radio3.Checked)
            {
                //HttpContext.Current.Response.Write(radio3.Text);
                total3 = 1;
                InserirDadosEnquete(perg, radio.Text, radio1.Text, radio3.Text, radio4.Text, total, total1, total3, total4);
            }
            else if (radio4.Checked)
            {
                //HttpContext.Current.Response.Write(radio4.Text);
                total4 = 1;
                InserirDadosEnquete(perg, radio.Text, radio1.Text, radio3.Text, radio4.Text, total, total1, total3, total4);
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "window.alert('Escolha uma das opções para efetuar votação! ');", true);
            }
        }

        protected void InserirDadosEnquete(string pergunta, string rad, string rad1, string rad3, string rad4, int tot, int tot1, int tot3, int tot4)
        {
            try
            {
                SPSite site = SPContext.Current.Site;
                SPWeb web = SPContext.Current.Web;
                SPList lista = web.Lists["Lista Enquete"];
                SPListItem listaitem = lista.Items.Add();

                pergunta = pergunta.Replace("'", "");

                listaitem["Pergunta"] = pergunta.ToString();
                listaitem["Opção 1"] = rad.ToString();
                listaitem["Opção 2"] = rad1.ToString();
                listaitem["Opção 3"] = rad3.ToString();
                listaitem["Opção 4"] = rad4.ToString();
                listaitem["Total opção 1"] = tot;
                listaitem["Total opção 2"] = tot1;
                listaitem["Total opção 3"] = tot3;
                listaitem["Total opção 4"] = tot4;
                listaitem["Flag consulta"] = 0;

                web.AllowUnsafeUpdates = true;
                listaitem.Update();
                web.AllowUnsafeUpdates = false;

                //Page.ClientScript.RegisterStartupScript(this.GetType(), "", "window.alert('Voto processado com sucesso! ');", true);
                //redirecionaResultado();
                ver = "sim";

                //string url = "http://intranet-producao:91/";
                string url = HttpContext.Current.Request.Url.ToString();
                SPUtility.Redirect(url, SPRedirectFlags.Default, HttpContext.Current);

            }
            catch (Exception ex)
            {
                MsgErro = "Error na inclusão da lista enquete. <br> " + ex.Message.ToString();
            }
        }

        protected void redirecionaResultado()
        {

            if (verificaResultado == "sim")
            {
//                string url = "http://intranet-desenvolvimento:91/Paginas/resultadoEnquete.aspx?perg=" + perg + "&op3=" + op3 + "&op4=" + op4 + "";
//                SPUtility.Redirect(url, SPRedirectFlags.Default, HttpContext.Current);
            
            }
            else
            {

                //      HttpContext.Current.Response.Write("ja processado!");
                //      string url = "http://intranet-desenvolvimento:91/Paginas/resultadoEnquete.aspx?perg=" + perg + "&op3=" + op3 + "&op4=" + op4 + "";
                //      SPUtility.Redirect(url, SPRedirectFlags.Default, HttpContext.Current);

                try
                {

                    string final;
                    final = perg.Replace("'", "");


                    SPSite oSite = SPContext.Current.Site;
                    SPWeb oWeb = oSite.OpenWeb();
                    CultureInfo culture = new CultureInfo("pt-BR");
                    SPList oList = oWeb.Lists["Lista enquete"];
                    //SPListItem verifica = oList.Items.Add();


                    var r_enquete = oList.Items.Cast<SPListItem>().Select(i => new { Op1 = Convert.ToInt32(i["Total opção 1"]), Op2 = Convert.ToInt32(i["Total opção 2"]), Op3 = Convert.ToInt32(i["Total opção 3"]), Op4 = Convert.ToInt32(i["Total opção 4"]), Pergunta = i["Pergunta"].ToString(), top1 = i["Opção 1"].ToString(), top2 = i["Opção 2"].ToString(), top3 = (i["Opção 3"] == null ? "" : i["Opção 3"]).ToString(), top4 = (i["Opção 4"] == null ? "" : i["Opção 4"]).ToString() }).ToList();


                        var consultaNova = from u in r_enquete
                                           group u by
                                           new
                                           {
                                               u.Pergunta,
                                               u.top1,
                                               u.top2,
                                               u.top3,
                                               u.top4

                                           } into g
                                           where g.Key.Pergunta == final

                                           select new { Pergunta = g.Key.Pergunta, Somador = g.Select(x => x.Op1).Sum(), Opcao2 = g.Select(x => x.Op2).Sum(), Opcao3 = g.Select(x => x.Op3).Sum(), Opcao4 = g.Select(x => x.Op4).Sum(), Dopcao1 = g.Key.top1, Dopcao2 = g.Key.top2, Dopcao3 = g.Key.top3, Dopcao4 = g.Key.top4 };


                    if (!consultaNova.Any())
                    {
                        HttpContext.Current.Response.Write("&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;Não existe nenhum resultado da enquete para visualização. ");
                    }

                    foreach (var item in consultaNova)
                    {
                        totgeral = item.Somador + item.Opcao2 + item.Opcao3 + item.Opcao4;

                        int resu1 = 100 * item.Somador / totgeral;
                        int resu2 = 100 * item.Opcao2 / totgeral;
                        int resu3 = 100 * item.Opcao3 / totgeral;
                        int resu4 = 100 * item.Opcao4 / totgeral;

                        HttpContext.Current.Response.Write("<p>" + item.Pergunta + "</p>");
                        HttpContext.Current.Response.Write("<div class='resultados'>");
                        HttpContext.Current.Response.Write("<span class='opcao_1'>" + item.Dopcao1 + "</span>");

                        if (resu1 > 100)
                        {
                            tot1max = 100;
                            HttpContext.Current.Response.Write("<strong>" + item.Somador + " (" + resu1 + "%)</strong> <span style=\"width:" + tot1max + "%; background: url('/Style Library/img/bg/opcao_1.png')  repeat-x; \">&nbsp;</span>&nbsp;" + item.Somador);
                        }
                        else
                        {
                            HttpContext.Current.Response.Write("<strong>" + item.Somador + " (" + resu1 + "%)</strong> <span style=\"width:" + resu1 + "%; background: url('/Style Library/img/bg/opcao_1.png') repeat-x; \">&nbsp;</span>&nbsp;" + item.Somador);
                        }

                        HttpContext.Current.Response.Write("</div>");

                        HttpContext.Current.Response.Write("<div class='resultados'>");
                        HttpContext.Current.Response.Write("<span class='opcao_2'>" + item.Dopcao2 + "</span>");

                        if (resu2 > 100)
                        {
                            tot2max = 100;
                            HttpContext.Current.Response.Write("<strong>" + item.Opcao2 + " (" + resu2 + "%)</strong> <span style=\"width:" + tot2max + "%; background: url('/Style Library/img/bg/opcao_2.png') repeat-x;\">&nbsp;</span>&nbsp;" + item.Opcao2);
                        }
                        else
                        {
                            HttpContext.Current.Response.Write("<strong>" + item.Opcao2 + " (" + resu2 + "%)</strong> <span style=\"width:" + resu2 + "%; background: url('/Style Library/img/bg/opcao_2.png') repeat-x;\">&nbsp;</span>&nbsp;" + item.Opcao2);
                        }

                        HttpContext.Current.Response.Write("</div>");

                        if (item.Dopcao3.ToString() != "")
                        {
                            HttpContext.Current.Response.Write("<div class='resultados'>");
                            HttpContext.Current.Response.Write("<span class='opcao_3'>" + item.Dopcao3 + "</span>");

                            if (resu3 > 100)
                            {
                                tot3max = 100;
                                HttpContext.Current.Response.Write("<strong>" + item.Opcao3 + " (" + resu3 + "%)</strong> <span style=\"width:" + tot3max + "%; background: url('/Style Library/img/bg/opcao_3.png') repeat-x;\">&nbsp;</span>&nbsp;" + item.Opcao3);
                            }
                            else
                            {
                                HttpContext.Current.Response.Write("<strong>" + item.Opcao3 + " (" + resu3 + "%)</strong> <span style=\"width:" + resu3 + "%; background: url('/Style Library/img/bg/opcao_3.png') repeat-x;\">&nbsp;</span>&nbsp;" + item.Opcao3);
                            }

                            HttpContext.Current.Response.Write("</div>");
                        }

                        if (item.Dopcao4.ToString() != "")
                        {
                            HttpContext.Current.Response.Write("<div class='resultados'>");
                            HttpContext.Current.Response.Write("<span class='opcao_4'>" + item.Dopcao4 + "</span>");

                            if (resu4 > 100)
                            {
                                tot4max = 100;
                                HttpContext.Current.Response.Write("<strong>" + item.Opcao4 + " (" + resu4 + "%)</strong> <span style=\"width:" + tot4max + "%; background: url('/Style Library/img/bg/opcao_4.png') repeat-x;\">&nbsp;</span>&nbsp;" + item.Opcao4);
                            }
                            else
                            {
                                HttpContext.Current.Response.Write("<strong>" + item.Opcao4 + " (" + resu4 + "%)</strong> <span style=\"width:" + resu4 + "%; background: url('/Style Library/img/bg/opcao_4.png') repeat-x;\">&nbsp;</span>&nbsp;" + item.Opcao4);
                            }

                            HttpContext.Current.Response.Write("</div>");
                        }

                        HttpContext.Current.Response.Write("<div class='totalVotacao'>Total de votos: " + totgeral + "</div>");
                        HttpContext.Current.Response.Write("<div id='detalheVotacao'><a href='/Paginas/resultadoEnquete.aspx?perg=" + final + "&op3=" + op3 + "&op4=" + op4 + "' class='verDetalhes'>Ver detalhes</a></div>");
                    }

                    // Esconde os controles após a visualização do resultado da enquete.
                    votar.Visible = false;
                    radio.Visible = false;
                    radio1.Visible = false;
                    radio3.Visible = false;
                    radio4.Visible = false;
                    /////////////////////////////////

                }
                catch (Exception ex)
                {
                    MsgErro = "Error na visualização do resultado da enquete. <br> " + ex.Message.ToString();
                }
            }
        }


























    }
}
